"""
@-*- coding: utf-8 -*-
@ python: 3.12.3
@ 创建者: JacksonCode
@ 创建时间: 2025-10-11
"""

import hashlib
import json
import struct

def md5_str(s: str, encoding: str = 'utf-8') -> str:
    """返回字符串 s 的 32 位小写 MD5 值"""
    return hashlib.md5(s.encode(encoding)).hexdigest()

def str2rstr_utf8(s: str) -> bytes:
    """JS 里的 str2rstr_utf8：UTF-8 编码成原始字节串"""
    return s.encode('utf-8')

def rstr_md5(data: bytes) -> bytes:
    """JS 里的 rstr_md5：对原始字节串做 MD5，返回 16 字节二进制"""
    return hashlib.md5(data).digest()

def rstr2hex(bin_md5: bytes) -> str:
    """
    JS 里的 rstr2hex：
    把 16 字节按 4 组 32 位小端序整数展开，
    每个整数转成 8 位小写 hex，然后拼成 32 位字符串。
    """
    # 16 字节 → 4 个 little-endian 32 位无符号整数
    a, b, c, d = struct.unpack('<4I', bin_md5)
    # 逐个补零到 8 位并转小写 hex
    return f'{a:08x}{b:08x}{c:08x}{d:08x}'

def hex_md5(s: str) -> str:
    """与题目 JS 函数完全一致"""
    return rstr2hex(rstr_md5(str2rstr_utf8(s)))

dict_item = {"city":"南京"}

city = json.dumps(dict_item)

strs = "GETDATA" + city

md5_str = hex_md5(strs)
print(md5_str)
